package cn.wlinker.video.monitor.stream;

import java.util.Map;

/**
 * 转换器接口
 *
 * @author gxsjx
 * @version 1.0
 * @date 2025/5/3
 * Copyright © wlinker.cn
 */
public interface Converter {

    /**
     * 设置线程状态
     *
     * @param state 状态标志
     */
    void setState(ConverterState state);


    /**
     * 获取该转换的key
     *
     * @return
     */
    String getKey();

    /**
     * 获取该转换的url
     *
     * @return
     */
    String getUrl();

    /**
     * 获取转换的状态
     *
     * @return
     */
    ConverterState getConverterState();

    /**
     * 添加一个流输出
     *
     * @param key
     * @param entity
     */
    void addOutputStreamEntity(String key, OutputStreamEntity entity);

    /**
     * 所有流输出
     *
     * @return
     */
    Map<String, OutputStreamEntity> allOutEntity();

    /**
     * 移除一个流输出
     *
     * @param key
     */
    void removeOutputStreamEntity(String key);

    /**
     * 设置修改时间
     *
     * @param updateTime
     */
    void setUpdateTime(long updateTime);

    /**
     * 获取修改时间
     *
     * @return
     */
    long getUpdateTime();

    /**
     * 退出转换
     */
    void exit();

    /**
     * 启动
     */
    void start();

    /**
     * 获取输出的流
     *
     * @param key
     * @return
     */
    OutputStreamEntity getOutputStream(String key);

    /**
     * 判断线程是否在运行
     *
     * @return boolean
     */
    boolean isRunning();
}